﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AG.Comunes.Entidades;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;

namespace AG.Datos.AccesoADatos.Implementacion
{
    public class DatosAdministracionTaquilla
    {

        /// <summary>
        /// Metodo que guarda el producto en la base de datos
        /// </summary>
        /// <returns></returns>
        public bool GuardarProducto(Producto producto)
        {
            bool retorno = true;
            SqlDataReader reader = null;
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            try
            {
              //  Se abre la conexion a base de datos
                miConexion.AbrirConexionBd();

                //Se introducen los datos de la conexion
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[usr_InsertarProducto]";
                command.CommandTimeout = 10;
                command.Parameters.AddWithValue("@nombre", producto.nombre);
                command.Parameters.AddWithValue("@descripcion", producto.Descripcion);
                command.Parameters.AddWithValue("@cantidad", producto.CantidadProductos);
                command.Parameters.AddWithValue("@valorTickets", producto.CantidadTickets);
                command.Parameters.AddWithValue("@fecha", producto.Fecha);
                command.Parameters.AddWithValue("@urlImagen", producto.Imagen.Url);

                reader = command.ExecuteReader();

            }
            catch (SqlException e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                retorno = false;
            }

            catch (Exception e)
            { 
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                retorno = false;
            }

            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }

            return retorno;
        }

        /// <summary>
        /// Metodo que modifica el producto en la base de datos
        /// </summary>
        /// <returns></returns>
        public bool ModificarProducto(Producto producto)
        {
            bool retorno;
            SqlDataReader reader = null;
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            try
            {
              //  Se abre la conexion a base de datos
                miConexion.AbrirConexionBd();

                //Se introducen los datos de la conexion
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[usr_ModificarProducto]";
                command.CommandTimeout = 10;
                command.Parameters.AddWithValue("@id", producto.Id);
                command.Parameters.AddWithValue("@nombre", producto.nombre);
                command.Parameters.AddWithValue("@descripcion", producto.Descripcion);
                command.Parameters.AddWithValue("@totalCanjeados", producto.TotalCanjeados);
                command.Parameters.AddWithValue("@cantidad", producto.CantidadProductos);
                command.Parameters.AddWithValue("@fecha", producto.Fecha);
                command.Parameters.AddWithValue("@valorTicket", producto.CantidadTickets);
                command.Parameters.AddWithValue("@imagen", producto.Imagen.Url);
                command.Parameters.AddWithValue("@status", producto.Status);

                reader = command.ExecuteReader();

            }
            catch (SqlException e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                retorno = false;
            }

            catch (Exception e)
            { 
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                retorno = false;
            }

            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }

            return true;
        }

        /// <summary>
        /// Metodo que consulta todos los productos 
        /// </summary>
        /// <returns>DataSet con todos los registros</returns>
        public DataSet ObtenerTodosLosProductos()
        {
            Conexion miConexion = new Conexion();
            DataSet ds;
            try
            {

                miConexion.AbrirConexionBd();
                ds = SqlHelper.ExecuteDataset(miConexion.GetCadenaConexion(), CommandType.StoredProcedure, "usr_ConsultarTodosLosProductos");
                
            }
            catch
            {
                throw;
            }
            finally
            {
                miConexion.CerrarConexionBd();
            }
            return ds;
        }


    }
}
